JSTL(JSP Standard Tag Library)
✒️ 2025-06-12 15:18 내용 수정
참고 자료 : 위키백과 자바서버 페이지 표준 태그 라이브러리, nemo's Java JSTL 정리, Leica's JSP JSTL 사용 방법 - 주요 태그 문법 정리
Java EE 기반의 웹 어플리케이션 개발 플랫폼을 위한 컴포넌트 모음
- XML 데이터 처리, 조건문, 반복문 등의 작업을 처리하거나, 다른 JSP 페이지를 호출하는 등의 일을 쉽게 수행할 수 있다.
사전 준비
라이브러리 추가
- apache-tomcat-9.0.83\webapps\examples\WEB-INF\lib 폴더에 있는 jar 파일 2개를 복사한다.
- apache-tomcat-9.0.83\lib 에 복사한 jar 파일을 붙여넣기 한다.
- 앞으로 사용할 라이브러리는 이 위치에 넣는다.
- 오라클과 연동#사전 준비의 2번의 라이브러리들도 모두 이 위치에 넣어두면 사용 가능
디렉티브 태그 추가
- 추가한 core 라이브러리를 사용하기 위해 JSP에 taglib 태그를 추가한다.
- JSP 태그#taglib 태그 참고.
<!-- JSTL(JSP Standard Tag Library) -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- fmt(format)을 위한 라이브러리도 사용하고 싶다면 taglib 태그로 추가한다.
<!-- fmt(Format) : 출력형식(날짜, 숫자 등) -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
core 태그 라이브러리
| 태그 | 설명 |
|---|---|
<c:set> |
변수를 생성하고 초기화. Servlet 보관소에 변수를 저장함 |
<c:remove> |
Servlet 보관소에 저장된 값 제거 |
<c:out> |
출력 |
<c:if> |
Java의 if문과 비슷 |
<c:choose> |
Java의 switch문과 비슷 |
<c:when> |
Java의 switch문 내의 case절과 비슷 |
<c:otherwise> |
Java의 switch문 내의 default절과 비슷 |
<c:forEach> |
Java의 for문과 비슷 |
<c:redirect> |
response.sendRedirect와 비슷한 역할로, JSP 페이지 호출 |
<c:import> |
현재 JSP 페이지에 다른 페이지 결과를 포함. 웹 페이지 외의 다른 종류의 웹 자원도 가능 |
<c:url> |
url을 저장하기 위한 변수 선언 |
<c:set>
- 변수를 생성하고 초기화할 때 사용
- scope는 보관소 위치를 지정하며, page, request, session, application 중 선택한다.
- 선언한 변수는 Attribute가 되기 때문에 EL 식 안에선 사용할 수 있지만 JSP 스크립팅 요소 내에선 사용할 수 없다.
<c:set var="변수명" value="값" scope="보관소위치"/>
<c:set var="변수명" scope="보관소위치">값</c:set>
<body>
<c:set var="test" value="변수를 선언함" scope="request"/>
test : ${test}
</body>
<c:remove>
- 선언된 변수를 제거할 때 사용
- scope는 보관소 위치를 지정하며, page, request, session, application 중 선택한다.
<c:remove var="변수명" scope="보관소위치"/>
<body>
<c:set var="test2" value="삭제해보기" scope="page"/>
test2 : ${test2} <br>
<c:set var="test2" scope="page"/>
test2가 제거 되었을까? : ${empty test2} <br>
</body>
<c:out>
- 출력문을 만들 때 사용
- 다만 자주 사용하진 않는다.
<c:out value="출력값" default="기본값"/>
<c:out value="출력값">기본값</c:out>
<body>
<c:out value="<c:out>으로 출력해보기"/>
</body>
<c:if>
- Java의 if문과 유사하다.
- 조건문#1. if 참고.
<c:if test="조건식" var="변수명" scope="보관소위치">
조건이 true일 때 수행할 내용
</c:if>
<%
int number = 10;
request.setAttribute("number", number);
%>
<body>
<c:if test="${(number % 2) eq 0}">
${number}는 2의 배수다.
</c:if>
</body>
<c:choose>, <c:when>, <c:otherwise>
<c:choose>는 Java의 switch문과 유사하며,<c:when>은 case절과,<c:otherwise>은 default절과 유사하다.- 조건문#2. switch 참고.
<c:choose>
<c:when test="조건식1">
조건1이 true일 때 수행할 내용
</c:when>
<c:when test="조건식2">
조건2가 true일 때 수행할 내용
</c:when>
<c:otherwise>
모든 조건에 해당하지 않을 때 수행할 내용
</c:otherwise>
</c:choose>
<body>
<c:choose>
<c:when test="${param.msg eq 1}">querystring이 1과 같다.</c:when>
<c:when test="${param.msg eq 3}">querystring이 3과 같다.</c:when>
<c:otherwise>querystring이 1도 3도 아니다.</c:otherwise>
</c:choose>
</body>
<c:forEach>
- Java의 for문과 유사하다.
- items에는 순회 가능한 객체를 사용할 수 있다.
- 배열, java.util.Collection 구현체(ArrayList, LinkedList, ..), java.util.Iterator, java.util.Enumeration, java.util.Map, 콤마","로 구분된 항목들을 포함한 문자열
<!-- for문과 비슷 -->
<c:forEach var="변수명" begin="시작값" end="끝값" step="증감">
반복 수행할 내용
</c:forEach>
<!-- 향상된 for문/forEach 문과 비슷 -->
<c:forEach var="변수명" items="목록데이터" varStatus="cnt">
목록 데이터를 순차적으로 꺼내서 수행할 내용
<!-- cnt:count : 개수
cnt:index : 인덱스 -->
</c:forEach>
<%
Map<String, Integer> map = new HashMap<>();
map.put("사과", 1);
map.put("참외", 2);
map.put("포도", 3);
request.setAttribute("map", map);
%>
<body>
<c:forEach var="i" begin="1" end="10" step="1">
<c:if test="${i mod 2 eq 1}">
<font color="red">${i}는 홀수</font><br>
</c:if>
<c:if test="${i mod 2 eq 0}">
<font color="blue">${i}는 짝수</font><br>
</c:if>
</c:forEach>
<hr>
<c:forEach var="m" items="${map}" varStatus="cnt">
${cnt.count} : ${m} <br>
</c:forEach>
</body>
<c:redirect>
- JSP 페이지를 호출하며, JSP 페이지가 아닌 다른 웹 자원과 다른 웹 서버의 웹 자원도 호출할 수 있다.
<jsp:forward>와 비슷하지만 sendRedirect 메소드와 동일하게 동작한다.
<c:redirect url="페이지주소"/>
<!-- 웹 페이지를 호출하면서 데이터를 넘겨줄 때 -->
<c:redirect url="페이지주소"/>
<c:param name="이름" value="값"/>
</c:redirect>
<body>
<c:redirect url="test.jsp"/>
</body>
<body>
test 페이지를 호출했습니다.
</body>
- test.jsp 페이지가 바로 뜬다.
<c:import>
- 현재 JSP 페이지에 다른 페이지의 결과를 포함시키며, JSP 페이지 외의 다른 웹 자원을 불러올 수 있다.
<c:import url="페이지주소"/>
<!-- 웹 페이지를 호출하면서 데이터를 넘겨줄 때 -->
<c:import url="페이지주소">
<c:param name="이름" value="값"/>
</c:import>
<c:url>
<c:set>이 변수 선언을 위해 사용된다면,<c:url>은 URL을 저장하기 위한 변수 선언에 사용된다.
<c:url var="변수명" url="페이지주소"/>
<!-- URL을 생성하고 데이터를 넘겨줄 때 -->
<c:url var="변수명" url="페이지주소"/>
<c:param name="이름" value="값"/>
</c:url>
format 태그 라이브러리
| 태그 | 설명 |
|---|---|
<fmt:formatNumber> |
숫자를 원하는 형식으로 표현 |
<fmt:formatDate> |
날짜 객체를 원하는 형식으로 표현 |
<fmt:formatNumber>
- 숫자를 원하는 형식으로 출력할 때 사용한다.
<fmt:formatNumber value="숫자객체"/>
<%
int n = 289479257;
request.setAttribute("n", n);
%>
<body>
<fmt:formatNumber value="${n}"/>
</body>
<fmt:formatDate>
- 날짜 객체를 원하는 형식으로 출력할 때 사용한다.
<fmt:formatDate value="java.util.Date 객체" pattern="날짜패턴"
<%
Date today = new Date();
request.setAttribute("today", today);
%>
<body>
<fmt:formatDate value="${today}" pattern="yyyy년 MM월 dd일 hh시 mm분"/>
</body>